package com.lagou.server;


import com.lagou.model.User;
import com.lagou.model.UserMessage;

import java.io.IOException;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 编程实现服务器的主要功能
 */
public class ServerView {
    static ReentrantLock lock = new ReentrantLock();//线程之间通信，加锁

    // 应该是一个单例
    // 2.声明本类类型的引用指向本类类型的对象艾格纳并使用private static 关键字修饰
    private static ServerView sin = new ServerView();

    // 1.私有化构造方法，使用private 方法修饰
    private ServerView() {}

    // 3.提供公有的get方法，负责将上述对象返回出去，使用public static 关键字修饰
    public static ServerView getInstance() {
        return sin;
    }

    /**
     * 自定义成员方法实现客户端发来消息的接受并处理
     */
    public void serverReceive(ServerComunicator sc) throws IOException, ClassNotFoundException, InterruptedException {

        UserMessage tum = (UserMessage) sc.getOis().readObject();
        System.out.println("接受到的消息是：" + tum);

        switch (tum.getType()) {
            case "byebye":
                sc.closeServerCommunicateThread();
                System.out.println("回复客户端可以下线消息！");
                tum.setType("success");
                break;
            case "userCheck":
                // 这里管理员账户密码是内置，已经预置好的，我们只需要去校验是否相等即可
                // 调用方法实现实现管理员账户和密码信息的校验
                if (ServerDao.getInstance().ServerUserCheck(tum.getUser())) {
                    tum.setType("success");
                } else {
                    tum.setType("fail");
                }
                break;
            case "managerCheck":
                // 这里管理员账户密码是内置，已经预置好的，我们只需要去校验是否相等即可
                // 调用方法实现实现管理员账户和密码信息的校验
                if (ServerDao.getInstance().ServerManagerCheck(tum.getUser())) {
                    tum.setType("success");
                } else {
                    tum.setType("fail");
                }
                break;
            case "modifyPassword":
                if (ServerDao.getInstance().ServerModifyUserPassword(tum.getUser())) {
                    tum.setType("success");
                } else {
                    tum.setType("fail");
                }
                break;

            case "addUser":
                if (ServerDao.getInstance().ServerAddUser(tum.getUser())) {
                    tum.setType("success");
                } else {
                    tum.setType("fail");
                }
                break;

            case "delUser":
                if (ServerDao.getInstance().ServerDelUser(tum.getUser())) {
                    tum.setType("success");
                } else {
                    tum.setType("fail");
                }
                break;

            case "findUser":
                User user = ServerDao.getInstance().ServerFindUser(tum.getUser());
                tum.setUser(user);
                if (null != user) {
                    tum.setType("success");
                } else {
                    tum.setType("fail");
                }
                break;

            case "modUser":
                if (ServerDao.getInstance().ServerModUser(tum.getUser())) {
                    tum.setType("success");
                } else {
                    tum.setType("fail");
                }
                break;

            default:
                System.out.println("不支持的消息类型");
                break;
        }

        // 将校验结果发送个客户端
        sc.getOos().writeObject(tum);
        System.out.println("服务器发送校验结果成功！");

        //System.out.println("客户端" + inetAddress + "已下线！");
        //notifiable.recvAndNnotifyAllClient("客户端" + getAddressInfo() + "已下线！");
    }
}
